import {defineStore} from 'pinia'
import {getUserInfo} from '@/api/permission/user'
import router from "@/router";

export const useUserStore = defineStore('user', {
    //定义的仓库
    state: () => ({
        token: null, // 存储token
        userInfo: null, // 可以存储其他用户信息，如用户名、角色等
        permissions: null, // 用户授权的菜单信息（所有类型数据包括文件夹、菜单、按钮） 以父子结构存储
        unfoldPermission: [] //所有菜单平铺之后的效果
    }),
    actions: {
        // 设置token
        setToken(token) {
            this.token = token;
            window.localStorage.setItem("token", JSON.stringify(token))
        },

        //从后端接口获取身份信息、菜单权限
        loadUserInfo(resolve) {
            const state = this
            //获取用户身份信息
            getUserInfo().then(({user, grantMenus}) => {
                // console.log("1 user",user)
                // console.log("2 grantMenus",grantMenus)
                this.userInfo = user; //用户基本信息
                this.permissions = grantMenus //用户已授权的菜单信息
                this.unfoldPermission = []
                this.permissions.forEach(menu => {
                    this.unfoldPermission.push(menu.perms)
                    menu.children.forEach(child => {
                        this.unfoldPermission.push(child.perms);
                        if (child.children) {
                            child.children.forEach(thirdMenu => {
                                this.unfoldPermission.push(thirdMenu.perms)
                            })
                        }

                    })
                })


                console.log("this.unfoldPermission==平铺的", this.unfoldPermission)


                resolve(this.permissions);
            })
        },

        // 移除token
        logout() {
            this.token = null;
            // 这里也可以清除其他用户信息
            this.userInfo = null;
            this.permissions = null;
            //清除本地缓存
            window.localStorage.removeItem("token");

            //跳转到登录页面
            router.replace({path: '/login'})
        },

    },
    getters: {
        getToken() {

            if (!this.token) {
                this.token = JSON.parse(window.localStorage.getItem("token"))
            }
            return this.token
        },
        //获取用户基本信息
        getUserInfo() {
            return this.userInfo
        },
        //获取 权限列表（树形结构）
        /**
         * 1 系统管理
         *      children[
         *          2 用户管理
         *          3 角色管理
         *         ]
         * @returns {null|Permissions|*}
         */
        getPermissions() {
            return this.permissions;
        },
        getUnfoldPermission() {
            return this.unfoldPermission;
        }


    }

});